#include <iostream>
#include <string>
#include <utility>
#include <tuple>
using namespace std;

int main()
{
	pair<int, float> p1(42, 13.2f);

	cout << "p1: [ " << p1.first <<",  "<< p1.second<< " ]" << endl;

	//template< class... Args1, class... Args2 >
	//constexpr pair(std::piecewise_construct_t,
	//	std::tuple<Args1...> first_args,
	//	std::tuple<Args2...> second_args)
	pair<int, float> p2(piecewise_construct, make_tuple(42), make_tuple(12.3f));
	cout << "p2: [ " << p2.first <<",  "<< p2.second<< " ]" << endl;

	pair<pair<double, int>, string> p3(
		piecewise_construct,
		forward_as_tuple(0.123, 7),
		forward_as_tuple(10, 'a')); //string(n, char)
	cout << "p3: [ [ " << p3.first.first << ",  " <<p3.first.second <<  "],  "<< p3.second << " ]"<<endl;
}